package com.lowcodeai.ai.model;

import com.lowcodeai.ai.model.request.ChatRequest;
import com.lowcodeai.ai.model.request.CompletionRequest;
import com.lowcodeai.ai.model.request.EmbeddingRequest;
import com.lowcodeai.ai.model.response.ChatResponse;
import com.lowcodeai.ai.model.response.CompletionResponse;
import com.lowcodeai.ai.model.response.EmbeddingResponse;

/**
 * AI模型适配器接口
 * 用于统一管理不同的AI模型，支持OpenAI、Claude、国产模型等
 * 
 * @author LowCodeAI
 * @since 1.0.0
 */
public interface ModelAdapter {
    
    /**
     * 获取模型名称
     */
    String getModelName();
    
    /**
     * 获取模型类型
     */
    ModelType getModelType();
    
    /**
     * 检查模型是否可用
     */
    boolean isAvailable();
    
    /**
     * 聊天对话
     */
    ChatResponse chat(ChatRequest request);
    
    /**
     * 文本补全
     */
    CompletionResponse complete(CompletionRequest request);
    
    /**
     * 文本向量化
     */
    EmbeddingResponse embed(EmbeddingRequest request);
    
    /**
     * 获取模型配置信息
     */
    ModelConfig getModelConfig();
    
    /**
     * 获取模型使用统计
     */
    ModelUsage getModelUsage();
    
    /**
     * 模型类型枚举
     */
    enum ModelType {
        OPENAI("OpenAI"),
        CLAUDE("Claude"),
        OLLAMA("Ollama"),
        QWEN("通义千问"),
        ERNIE("文心一言"),
        SPARK("讯飞星火"),
        CUSTOM("自定义");
        
        private final String displayName;
        
        ModelType(String displayName) {
            this.displayName = displayName;
        }
        
        public String getDisplayName() {
            return displayName;
        }
    }
} 